﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace FrbaBus.UserInterface.ABM.Recorrido
{
    using FrbaBus.DataRepository;

    public partial class AltaRecorrido : Form
    {

        ValidacionesGenericas validacionesGenericas;

        RecorridoRepository recorridoRepository;

        public AltaRecorrido()
        {
            InitializeComponent();
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            recorridoRepository = new RecorridoRepository();
            cargarCiuOrigenComboBox();
            cargarCiuDestComboBox();
            cargarTServComboBox();
            comboBoxCiuOrigen.Text = "Seleccione...";
            comboBoxCiuDest.Text = "Seleccione...";
            comboBoxTipoServ.Text = "Seleccione...";
            validacionesGenericas = new ValidacionesGenericas();
        }


        private void crearButton_Click(object sender, EventArgs e)
        {
            try
            {
                //  Recupero los valores de la GUI.
                string codRecorrido = codRecorridoTextbox.Text;
                int ciudadOrigen = Convert.ToInt16(recorridoRepository.obtenerCiudad(comboBoxCiuOrigen.Text));
                int ciudadDestino = Convert.ToInt16(recorridoRepository.obtenerCiudad(comboBoxCiuDest.Text));
                float precioBasexPasaje = (float)Convert.ToDouble(precioPasajeTextBox.Text);
                float precioBasexKg = (float)Convert.ToDouble(precioPorKiloTextBox.Text);
                int tipoServicio = Convert.ToInt16(recorridoRepository.obtenerServicio(comboBoxTipoServ.Text));

                // Llamo a validarCampos
                validarCampos(codRecorrido, ciudadOrigen, ciudadDestino, precioBasexPasaje, precioBasexKg, tipoServicio);

                //  Guardo en la BD
                recorridoRepository.guardar(codRecorrido, ciudadOrigen, ciudadDestino, precioBasexPasaje, precioBasexKg, tipoServicio);

                MessageBox.Show("Se creó el recorrido correctamente.");
            }
            catch (ValidacionNegocioException excepcionValidacion)
            {
                MessageBox.Show(excepcionValidacion.MensajeAlusuario);
            }
        }


        //  Valido los campos obligatorios

        private void validarCampos(string cod, int ciuO, int ciuD, float prePas, float preKg, int Tserv)
        {
            validacionesGenericas.campoObligatorio(cod, "El código de recorrido es obligatorio.");
            validacionesGenericas.campoObligatorio(Convert.ToString(ciuO), "La ciudad Origen es obligatoria.");
            validacionesGenericas.campoObligatorio(Convert.ToString(ciuD), "La ciudad Destino es obligatoria.");
            if (prePas <= 0 & preKg <= 0)
            {
                throw new ValidacionNegocioException("Se debe especificar precio de Pasaje y/o Precio de Kilo");
            }

        }





        public void cargarCiuOrigenComboBox()
        {
            DataSet dataSet = recorridoRepository.obtenerDataSetParaVincularElementoVista("sp_cargarCiudades");
            comboBoxCiuOrigen.DataSource = dataSet.Tables[0].DefaultView;
            comboBoxCiuOrigen.ValueMember = "ID";
            comboBoxCiuOrigen.DisplayMember = "NOMBRE";
        }


        public void cargarCiuDestComboBox()
        {
            DataSet dataSet = recorridoRepository.obtenerDataSetParaVincularElementoVista("sp_cargarCiudades");
            comboBoxCiuDest.DataSource = dataSet.Tables[0].DefaultView;
            comboBoxCiuDest.ValueMember = "ID";
            comboBoxCiuDest.DisplayMember = "NOMBRE";
        }

        public void cargarTServComboBox()
        {
            DataSet dataSet = recorridoRepository.obtenerDataSetParaVincularElementoVista("sp_cargarTservicios");
            comboBoxTipoServ.DataSource = dataSet.Tables[0].DefaultView;
            comboBoxTipoServ.ValueMember = "ID";
            comboBoxTipoServ.DisplayMember = "DESCRIPCION";
        }     


        private void btnLimpiarAR_Click(object sender, EventArgs e)
        {
            //Restablece los campos a completar
            codRecorridoTextbox.Clear();
            comboBoxCiuOrigen.Text = "Seleccione...";
            comboBoxCiuDest.Text = "Seleccione...";
            comboBoxTipoServ.Text = "Seleccione...";
            precioPasajeTextBox.Clear();
            precioPorKiloTextBox.Clear();
        }




        private void precioPasajeTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (validacionesGenericas.esNumero(e.KeyChar))
            {
                e.Handled = true;
            }
        }


        private void precioPorKiloTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (validacionesGenericas.esNumero(e.KeyChar))
            {
                e.Handled = true;
            }
        }

        private void pesoDisponibleTextBox_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (validacionesGenericas.esNumero(e.KeyChar))
            {
                e.Handled = true;
            }
        }



    }

}
